Recent advances in microprocessor design and component integration have enabled a wide range of devices to offer increasingly complex functionality and “soft” features. Soft features include software applications that enhance and customize the operation of a device. These devices include standard computing devices, such as desktop and laptop computers, portable computing devices, such as personal data assistants, and consumer devices, such as cellular telephones, messaging pagers, gaming consoles, and set top boxes. Most devices now include an operating system to support the soft features and other extensions.
The increased capabilities offered by these software-upgradeable devices have also created certain user expectations. Often, users are not technically savvy and are intolerant of performance compromises occasioned by architectural challenges, such as slow or inconsistent application performance. Similarly, users generally expect to be able to access a host of separate applications, which are implemented at the system level through multitasking. For users, widely available software applications assure a positive experience through consistency and increased exposure across multiple platforms. However, for software developers, engineering software applications for disparate computing platforms entails increased development costs and on-going support and upgrade commitments for each supported architecture.
Managed code platforms provide one solution to software developers seeking to support multiple platforms by presenting a machine-independent and architecture-neutral operating environment. Managed code platforms include programming language compilers and interpreters executed by an operating system as user applications, but which provide virtual runtime environments within which compatible applications can operate. For instance, applications written in the Java programming language, when combined with a Java virtual machine (JVM) runtime environment, can operate on heterogeneous computer systems independent of machine-specific environment and configuration settings. An overview of the Java programming language is described in P. van der Linden, “Just Java,” Ch. 1, Sun Microsystems, Inc. (2d ed. 1997), the disclosure of which is incorporated by reference. JVMs are a critical component to the overall Java operating environment, which can be ported to the full range of computational devices, including memory-constrained consumer devices.
Managed code platforms are generally designed for the monotonic execution of a single application instance. The combination of a managed code platform and an application instance forms an application process. Thus, multiple application processes can be executed to simulate multitasking behavior for a plurality of individual applications. Each “multitasked” application executes under a separate managed code platform, which provides a discrete virtual runtime environment. In turn, each managed code platform executes in a separate process space under the control of the underlying operating system. Limited control over managed code platforms can be effected using facilities provided by the operating system, such as inter-process communication (IPC) and related mechanisms, such as signal handlers, but similar facilities are generally not available for controlling applications executing under managed code platforms.
Application control is unavailable for several reasons. First, each application can originate from a different source and can be programmed using different application models, programming languages and operational assumptions. As well, each application is isolated within the virtual runtime environment provided by the managed code platform and inter-process control must be explicitly programmed into an application using extended library functions operating within the runtime environment. Such program extensions are often slow and can potentially introduce compatibility and interoperability issues. Moreover, isolated application execution is generally preferred over cooperative application execution for simplicity, robustness and efficiency.
Nevertheless, an application manager is frequently used to provide a minimal degree of centralized control over multiple application processes executing on a device, especially consumer devices, based on user requests. However, the control is generally limited to provided large grained control over application startup and termination. Fine grained control over application-level behavioral characteristics is unsupported due to the unavailability of application control facilities. For example, application properties or the look and feel of the user interface might need to be dynamically changed by the runtime environment or to ensure a consistence appearance and user experience. However, the lack of inter-application control facilities precludes making such runtime changes.
Therefore, there is a need for an approach to providing dynamic centralized control over isolated application processes. Preferably, such an approach would effect asynchronous changes over each application process without effecting discrete application execution. Moreover, such an approach would further provide a flexible mechanism to communicate behavioral changes while allowing each application process to proceed without explicit cooperation.